#include "src/common/clog.h"
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main() {
    printf("=== 集中式日志系统演示 ===\n");
    printf("此演示将测试以下功能：\n");
    printf("1. 绝对路径日志目录配置\n");
    printf("2. 日志级别过滤\n");
    printf("3. 日志缓存功能\n");
    printf("4. 控制台输出\n");
    printf("5. 配置文件前缀支持\n\n");
    
    // 设置配置文件路径
    if (clog_set_config_path("test_config.conf") != 0) {
        printf("Failed to set config path\n");
        return 1;
    }
    
    // 初始化日志系统
    printf("初始化日志系统...\n");
    if (clog_init() != 0) {
        printf("Failed to initialize log system\n");
        printf("请确保 log_server 正在运行\n");
        return 1;
    }
    
    printf("日志系统初始化成功！\n\n");
    
    // 获取进程名
    char process_name[64];
    clog_get_process_name(process_name, sizeof(process_name));
    printf("当前进程名: %s\n\n", process_name);
    
    printf("开始发送不同级别的日志消息...\n\n");
    
    // 测试不同级别的日志
    LOGI("这是一条信息日志 - 系统正常运行");
    sleep(1);
    
    LOGD("这是一条调试日志 - 变量值: count=%d, status=%s", 42, "active");
    sleep(1);
    
    LOGW("这是一条警告日志 - 磁盘空间不足，剩余: %.1f%%", 15.5);
    sleep(1);
    
    LOGE("这是一条错误日志 - 连接数据库失败: %s", "timeout after 30s");
    sleep(1);
    
    // 测试多条连续日志
    printf("发送连续日志测试缓存功能...\n");
    for (int i = 1; i <= 5; i++) {
        LOGI("连续日志测试 #%d - 测试缓存和刷新机制", i);
        usleep(200000); // 200ms
    }
    
    // 手动刷新
    printf("手动刷新日志缓存...\n");
    clog_flush();
    
    // 测试长消息
    LOGI("长消息测试: %s", 
         "这是一条很长很长的日志消息，用于测试系统对长文本的处理能力。"
         "它包含了很多信息，比如用户操作、系统状态、错误详情等等。"
         "通过这样的测试可以确保日志系统能够正确处理各种长度的消息。");
    
    printf("\n日志发送完成！\n");
    printf("你可以检查以下位置的日志文件:\n");
    printf("  目录: /tmp/clog_test_logs/\n");
    printf("  文件: %s.log\n", process_name);
    printf("\n控制台输出功能已启用，所以你应该能在上面看到彩色的日志输出。\n");
    
    // 清理资源
    clog_cleanup();
    printf("\n演示完成！\n");
    
    return 0;
}
